package com.dxf.chepter08

import scala.collection.mutable

/**
 *  大数据是对元素集处理,并返回集合
 *
 *
 *
 *
 *
 */
object T90_集合元素操作 {


  def main(args: Array[String]): Unit = {
    //1 对List(2,4,7) 中的数据乘2
    val list = List(2, 4, 7)
    var list2 = List[Int]()

    for (elem <- list) {
      list2 = list2 :+ elem * 2
    }
    println(list2)

    /**
     * 上面问题的解决
     * 优点: 简单,好理解
     * 缺点: 不够简洁,高效,没有体现函数式编程特点,不利于处理复杂的数据处理业务
     *
     */


    //引入高阶函数,自己实现的
    println(listT2(sub _, 2, list))


    /**
     *  1 将list集合元素遍历
     *  2 将各个元素传递给multiple函数 得到新的 Int
     *  3 将得到的新的Int,放入到新的结合并返回
     *  4 因此multiple函数调用3次
     *
     */
    var list3 = list.map(multiple _)
    println(list3)

    println("===================================================")

    val myList = MyList()
    val myList2 = myList.map(multiple _)
    println(myList2)






  }

  def multiple(n: Int): Int = {
    2 * n
  }


  //高阶函数,高阶
  def listT2(f: (Int, List[Int]) => List[Int], n: Int, list: List[Int]): List[Int] = {
    f(n, list)
  }

  def sub(n: Int, list: List[Int]): List[Int] = {

    var list2 = List[Int]()
    for (elem <- list) {
      list2 = list2 :+ elem * n
    }
    list2
  }


}

//深刻理解map映射机制
class MyList {
  val list1 = List(3, 4, 7, 9)
  var list2 = List[Int]()

  def map(f: Int => Int): List[Int] = {
    //遍历集合
    for (elem <- list1) {
      list2 = list2 :+ f(elem)
    }
    list2
  }
}

object MyList{
  def apply(): MyList = new MyList()
}




